package BigInteger;

import java.math.BigInteger;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        /*
        public BigInteger(int num, Random rnd)     获得随机大整数，范围：[0 ~ 2的num次方-1]
        public BigInteger(String val)              获得指定的大整数
        public BIgInteger(String val, int radix)   获得指定进制的大整数

        public static BigInteger valueOf(long val) 静态方法获取BigInteger的对象，内部有优化
        细节：
             对象 一旦创建里面的数据就不能改变
         */


        //1.获得一个随机的大整数
        Random r = new Random();
        //需要创建BigInteger的对象
        BigInteger bd1 = new BigInteger(4,r);
        System.out.println(bd1);//[0 ~ 15]


        //2.获得一个指定的大整数(常用)
        BigInteger bd2 = new BigInteger("99999999999");
        //细节：上面创建对象后的括号中要加双引号,双引号内必须是整数，否则会报错
        System.out.println(bd2);


        //3.获得一个指定进制的大整数（了解即可）
        BigInteger bd3 = new BigInteger("100",2);
        System.out.println(bd3);//4
        //细节：
        //1.字符串中的数字必须是整数
        //2.字符串中的数字必须要跟进制吻合
        //比如二进制中只能写0和1，写其他的就报错


        //4.静态方法获取BigInteger的对象，内部有优化
        BigInteger bd4 = BigInteger.valueOf(100);
        System.out.println(bd4); //100
        //能表示的范围比较小，只有long的范围，超出这个范围就不行了
        BigInteger bd5 = BigInteger.valueOf(9223372036854775807L);
        //在内部对常用的数字： -16 ~ 16进行了优化
        //提前把-16 ~ 16先创建好BigInteger的对象，如果多次获取不会重新创建新的
        BigInteger bd6 = BigInteger.valueOf(16);
        BigInteger bd7 = BigInteger.valueOf(16);
        System.out.println(bd6 == bd7);//Ture,地址一样，同一个对象
        BigInteger bd8 = BigInteger.valueOf(17);
        BigInteger bd9 = BigInteger.valueOf(17);
        System.out.println(bd8 == bd9);//False
    }
}
